package ihm;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;

import javax.swing.AbstractButton;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JLabel;

import metier.FautesEtMiseres;
import metier.Joueur;

public class FenetreFaute extends Fenetre implements ActionListener, MouseListener{

	public JCheckBox fauteDeJeu = new JCheckBox("Faute de jeu");
	public JCheckBox fausseDonne= new JCheckBox("Fausse donne");
	public JLabel quiPrend=new JLabel("Qui prend...");
	public JCheckBox joueur1Prend = new JCheckBox(FenetrePrincipale.joueur1.getPrenom());
	public JCheckBox joueur2Prend = new JCheckBox(FenetrePrincipale.joueur2.getPrenom());
	public JCheckBox joueur3Prend = new JCheckBox(FenetrePrincipale.joueur3.getPrenom());
	public JCheckBox joueur4Prend = new JCheckBox(FenetrePrincipale.joueur4.getPrenom());
	public JCheckBox joueur5Prend = new JCheckBox(FenetrePrincipale.joueur5.getPrenom());
	public JButton annuler = new JButton("Annuler");
	public JButton confirmer = new JButton("Confirmer");
	
	private int idJoueurPrend=0;
	private boolean selection=false;
	private boolean premiereFausseDonne=true;
	private FenetrePrincipale F;
	
	public FenetreFaute(FenetrePrincipale LaFenetrePrincipaleEnCour, boolean premiereFausseDonne) {
		super();
		this.F=LaFenetrePrincipaleEnCour;
		this.premiereFausseDonne=premiereFausseDonne;
		
		quiPrend.setEnabled(selection);
		joueur1Prend.setEnabled(selection);
		joueur2Prend.setEnabled(selection);
		joueur3Prend.setEnabled(selection);
		joueur4Prend.setEnabled(selection);
		joueur5Prend.setEnabled(selection);
		confirmer.setEnabled(selection);
		
		this.setTitle("Fautes dans le jeu"); 
		this.setLocationRelativeTo(null); 

		this.setLayout(new GridBagLayout());
		GridBagConstraints c= new GridBagConstraints();
		c.insets=new Insets(5, 10, 10, 10);
		c.fill=GridBagConstraints.HORIZONTAL;
		c.gridx=c.gridy=0;
		c.gridheight=c.gridwidth=1;

		this.add(fauteDeJeu,c);
		
		c.gridx++;
		this.add(fausseDonne,c);
		c.gridx=0;
		c.gridy++;
		c.gridwidth=2;
		this.add(quiPrend,c);
		c.gridy++;
		this.add(joueur1Prend,c);
		c.gridy++;
		this.add(joueur2Prend,c);
		c.gridy++;
		this.add(joueur3Prend,c);
		c.gridy++;
		this.add(joueur4Prend,c);
		c.gridy++;
		this.add(joueur5Prend,c);
		c.gridy++;
		c.gridwidth=1;
		this.add(confirmer,c);
		c.gridx++;
		this.add(annuler,c);
		
		this.setResizable(false); 
		this.setVisible(true); 
		
		fausseDonne.addMouseListener(this);
		fauteDeJeu.addMouseListener(this);
		joueur1Prend.addMouseListener(this);
		joueur2Prend.addMouseListener(this);
		joueur3Prend.addMouseListener(this);
		joueur4Prend.addMouseListener(this);
		joueur5Prend.addMouseListener(this);
		confirmer.addMouseListener(this);
		annuler.addMouseListener(this);
	}

	@Override
	public void mouseClicked(MouseEvent arg0) {
		
		if(		(arg0.getSource()==joueur1Prend	||
				arg0.getSource()==joueur2Prend	||
				arg0.getSource()==joueur3Prend	||
				arg0.getSource()==joueur4Prend	||
				arg0.getSource()==joueur5Prend)	&&
				(((AbstractButton) arg0.getSource()).isEnabled())
			){

			if(((AbstractButton) arg0.getSource()).isSelected()){
				joueur1Prend.setEnabled(false);
				joueur2Prend.setEnabled(false);
				joueur3Prend.setEnabled(false);
				joueur4Prend.setEnabled(false);
				joueur5Prend.setEnabled(false);
				confirmer.setEnabled(true);
				
				((AbstractButton) arg0.getSource()).setEnabled(true);

				if(((AbstractButton) arg0.getSource())==joueur1Prend){
					idJoueurPrend=1;
					
				}if(((AbstractButton) arg0.getSource())==joueur2Prend){
					idJoueurPrend=2;
					
				}if(((AbstractButton) arg0.getSource())==joueur3Prend){
					idJoueurPrend=3;
				
				}if(((AbstractButton) arg0.getSource())==joueur4Prend){
					idJoueurPrend=4;
				
				}if(((AbstractButton) arg0.getSource())==joueur5Prend){
					idJoueurPrend=5;
				
				}

			}else{
				joueur1Prend.setEnabled(true);
				joueur2Prend.setEnabled(true);
				joueur3Prend.setEnabled(true);
				joueur4Prend.setEnabled(true);
				joueur5Prend.setEnabled(true);
				idJoueurPrend=0;
				confirmer.setEnabled(false);
				}
		}
		if(		(	arg0.getSource()==fausseDonne
				||	arg0.getSource()==fauteDeJeu	)
				&&	(((AbstractButton) arg0.getSource()).isEnabled())){
			selection=(fausseDonne.isSelected()||fauteDeJeu.isSelected());
			if(fausseDonne.isSelected()&&fauteDeJeu.isSelected()){
				selection=false;				
			}
			quiPrend.setEnabled(selection);
			joueur1Prend.setEnabled(selection);
			joueur2Prend.setEnabled(selection);
			joueur3Prend.setEnabled(selection);
			joueur4Prend.setEnabled(selection);
			joueur5Prend.setEnabled(selection);
			
			fausseDonne.setEnabled(!selection);
			fauteDeJeu.setEnabled(!selection);
			((AbstractButton) arg0.getSource()).setEnabled(true);
		}
		if(arg0.getSource()==annuler){
			this.dispose();
			}
		
		if(arg0.getSource()==confirmer){
			Joueur joueurFautif = null;
			ArrayList<Joueur> communauteDeJoueur=new ArrayList<Joueur>();
			communauteDeJoueur.add(F.joueur1);
			communauteDeJoueur.add(F.joueur2);
			communauteDeJoueur.add(F.joueur3);
			communauteDeJoueur.add(F.joueur4);
			communauteDeJoueur.add(F.joueur5);
			
			if (joueur1Prend.isSelected()){
				joueurFautif=F.joueur1;
				communauteDeJoueur.remove(F.joueur1);
			}if (joueur2Prend.isSelected()){
				joueurFautif=F.joueur2;
				communauteDeJoueur.remove(F.joueur2);
			}if (joueur3Prend.isSelected()){
				joueurFautif=F.joueur3;
				communauteDeJoueur.remove(F.joueur3);
			}if (joueur4Prend.isSelected()){
				joueurFautif=F.joueur4;
				communauteDeJoueur.remove(F.joueur4);
			}if (joueur5Prend.isSelected()){
				joueurFautif=F.joueur5;
				communauteDeJoueur.remove(F.joueur5);
			}
			
			
			
			FautesEtMiseres cetteFaute= new FautesEtMiseres(joueurFautif, communauteDeJoueur.get(0), communauteDeJoueur.get(1), communauteDeJoueur.get(2), communauteDeJoueur.get(3), premiereFausseDonne);
			
			if(fausseDonne.isSelected()){
				cetteFaute.fausseDonne();
				premiereFausseDonne=cetteFaute.premiereFois;
				F.setPremiereFausseDonne(premiereFausseDonne);
			}
			if(fauteDeJeu.isSelected()){
				cetteFaute.fauteDeJeu();
			}
			
			ArrayList<String> scoreApresFaute= new ArrayList<String>();
			scoreApresFaute.add(""+F.joueur1.score);
			scoreApresFaute.add(""+F.joueur2.score);
			scoreApresFaute.add(""+F.joueur3.score);
			scoreApresFaute.add(""+F.joueur4.score);
			scoreApresFaute.add(""+F.joueur5.score);
			F.setCompteurDonne(F.getCompteurDonne()+1);
			F.getFeuilleDeScore().add(scoreApresFaute);
			F.afficherScore();
			
			this.dispose();
		
		}

	}

	@Override
	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mousePressed(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseReleased(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void actionPerformed(ActionEvent arg0) {
		// TODO Auto-generated method stub
		
	}

}
